Costa Rica en la región

Casos acumulados

Casos desde el día 1

Casos por 100 mil habitantes


Casos en Costa Rica

Hospitalizaciones

Casos activos por cantón y provincia

Evolución de casos acumulados por provincia

  • Notese que para el 17 de abril hubo un faltante en los datos de personas recuperadas.

Evolución de casos por cantón durante los últimos 40 días

  • Vale aclarar que en las tablas diarias cantonales que publica el Ministerio de Salud a veces se dan cambios en la cantidad de enfermos por cantón que no corresponden con cambios en el total de enfermos del país. Esto vendría siendo como si los enfermos se movilizaron a otro cantón, significando una reducción en el número de casos para el cantón donde salió y un incremento para el cantón donde ingresó (tengo entendido que esto se da con aclaraciones del cantón de residencia del enfermo). En mi caso estoy convirtiendo esos “casos negativos” a cero, para que sea más fácil observar unicamente los cantones donde se dieron los nuevos casos.

Elaborado por con datos diarios del CSSE del John Hopkins University y del Ministerio de Salud de Costa Rica.

LS0tCnRpdGxlOiAiQ09WSUQtMTkgZW4gQ29zdGEgUmljYSIKZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJWQtJW0tJVkgJUk6JU06JVMlcCcpYCIKYXV0aG9yOiBnZHM1MDYKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeShjb3VudHJ5Y29kZSkKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShzY2FsZXMpCmxpYnJhcnkoZ2dpcmFwaCkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KHNmKQpsaWJyYXJ5KHJlYWR4bCkgICAKbGlicmFyeShodHRyKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeSh0bWFwdG9vbHMpCgpTeXMuc2V0bG9jYWxlKGxvY2FsZT0iZXNfRVMuVVRGLTgiKQpmb3JtYXRvX2ZlY2hhIDwtICIlZC0lYiIKZmVjaGFfaG95IDwtIGFzLmNoYXJhY3RlcihTeXMuRGF0ZSgpKQojZmVjaGFfaG95IDwtICIyMDIwLTA3LTIwIgoKcGFpc2VzIDwtIGMoIkNvc3RhIFJpY2EiLCAiUGFuYW1hIiwgIkVsIFNhbHZhZG9yIiwgIkRvbWluaWNhbiBSZXB1YmxpYyIsCiAgICAgICAgICAgICJIb25kdXJhcyIsICJHdWF0ZW1hbGEiLCAiVXJ1Z3VheSIsICJDdWJhIikKCmZ1bl9wYWlzZXMgPC0gZnVuY3Rpb24oZmVjaGFfaG95LCBwYWlzZXMpewogIGNvdmlkMTlfY29udGFnaW9zIDwtIGZyZWFkKCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ1NTRUdJU2FuZERhdGEvQ09WSUQtMTkvbWFzdGVyL2Nzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfY29uZmlybWVkX2dsb2JhbC5jc3YiLCBoZWFkZXI9VClbCiAgICAsIHRpcG8gOj0gInBvc2l0aXZvcyIKICBdCiAgCiAgY292aWQxOV9yZWN1cGVyYWRvcyA8LSBmcmVhZCgiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NTU0VHSVNhbmREYXRhL0NPVklELTE5L21hc3Rlci9jc3NlX2NvdmlkXzE5X2RhdGEvY3NzZV9jb3ZpZF8xOV90aW1lX3Nlcmllcy90aW1lX3Nlcmllc19jb3ZpZDE5X3JlY292ZXJlZF9nbG9iYWwuY3N2IiwgaGVhZGVyPVQpWwogICAgLCB0aXBvIDo9ICJyZWN1cGVyYWRvcyIKICBdCiAgCiAgY292aWQxOV9kZWNlc29zIDwtIGZyZWFkKCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQ1NTRUdJU2FuZERhdGEvQ09WSUQtMTkvbWFzdGVyL2Nzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfZGVhdGhzX2dsb2JhbC5jc3YiLCBoZWFkZXI9VClbCiAgICAsIHRpcG8gOj0gImZhbGxlY2lkb3MiCiAgXQogIAogIGNvdmlkMTkgPC0gcmJpbmRsaXN0KGxpc3QoY292aWQxOV9jb250YWdpb3MsIGNvdmlkMTlfZGVjZXNvcywgY292aWQxOV9yZWN1cGVyYWRvcykpCiAgY292aWQxOV8xIDwtIG1lbHQoY292aWQxOSwKICAgICAgICAgICAgICAgICAgICAgICBpZC52YXJzID0gYygiUHJvdmluY2UvU3RhdGUiLCAiQ291bnRyeS9SZWdpb24iLCAiTGF0IiwgIkxvbmciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGlwbyIpLAogICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLm5hbWUgPSAiZmVjaGEiLAogICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLm5hbWUgPSAiY2Fzb3MiKVsKICAgICAgICAgICAgICAgICAgICAgICAgICwgY2Fzb3MgOj0gYXMuaW50ZWdlcihjYXNvcyldCiAgCiAgY292aWQxOV8yIDwtIGRjYXN0KGNvdmlkMTlfMSwgCiAgICAgICAgICAgICAgICAgICAgICBgUHJvdmluY2UvU3RhdGVgICsgYENvdW50cnkvUmVnaW9uYCArIExhdCArIExvbmcgKyBmZWNoYSB+IHRpcG8sIAogICAgICAgICAgICAgICAgICAgICAgdmFsdWUudmFyID0gImNhc29zIilbCiAgICAgICAgICAgICAgICAgICAgICAgICwgYWN0aXZvcyA6PSBwb3NpdGl2b3MgLSBmYWxsZWNpZG9zIC0gcmVjdXBlcmFkb3NdCiAgCiAgY292aWQxOV90aWR5IDwtIG1lbHQoY292aWQxOV8yLAogICAgICAgICAgICAgICAgICAgICAgIGlkLnZhcnMgPSBjKCJQcm92aW5jZS9TdGF0ZSIsICJDb3VudHJ5L1JlZ2lvbiIsICJMYXQiLCAiTG9uZyIsICJmZWNoYSIpLAogICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLm5hbWUgPSAidGlwbyIsCiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUubmFtZSA9ICJjYXNvcyIpWwogICAgICAgICAgICAgICAgICAgICAgICAgLCBgOj1gKGZlY2hhID0gbWR5KGZlY2hhKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RfcGFpcyA9IGNvdW50cnljb2RlKGBDb3VudHJ5L1JlZ2lvbmAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luID0gImNvdW50cnkubmFtZSIsIGRlc3RpbmF0aW9uID0gImlzbzNjIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpcyA9IGNvdW50cnljb2RlKGBDb3VudHJ5L1JlZ2lvbmAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4gPSAiY291bnRyeS5uYW1lIiwgZGVzdGluYXRpb24gPSAidW4ubmFtZS5lcyIpKQogICAgICAgICAgICAgICAgICAgICAgIF0KICAKICB0X2NudHJ5cyA8LSBjb3ZpZDE5X3RpZHlbYENvdW50cnkvUmVnaW9uYCAlaW4lIHBhaXNlcwogIF1bCiAgICAsIC4oY2Fzb3MgPSBzdW0oY2Fzb3MsIG5hLnJtID0gVCkpLAogICAgYnkgPSBjKCJDb3VudHJ5L1JlZ2lvbiIsICJmZWNoYSIsICJ0aXBvIiwgImNvZF9wYWlzIiwgInBhaXMiKSAKICBdWwogICAgLCBJRCA6PSBzZXFfbGVuKC5OKQogIF0KICAKICByZXR1cm4odF9jbnRyeXMpCn0KCmZ1bl9jYW50b25lc19yZXN1bWVuIDwtIGZ1bmN0aW9uKGZlY2hhX2hveSl7CiAgdGJsX3RpcG8gPC0gYygiUE9TSVRJVk9TIiwgIlJFQ1VQIiwgIkZBTExFQ0lET1MiLCAiR0VORVJBTCIpCgogICNodHRwOi8vZ2VvdmlzaW9uLnVuZWQuYWMuY3Ivb2dlcy9hcmNoaXZvc19jb3ZpZC8wNF8yOS8wNF8yOV9DU1ZfR0VORVJBTC5jc3YKICAjImh0dHA6Ly9nZW92aXNpb24udW5lZC5hYy5jci9vZ2VzL2FyY2hpdm9zX2NvdmlkLzA0XzI5LzA0XzI5X0NTVl9HRU5FUkFMLmNzdiIgIAogIFVSTHMgPC0gcGFzdGUwKCJodHRwOi8vZ2VvdmlzaW9uLnVuZWQuYWMuY3Ivb2dlcy9hcmNoaXZvc19jb3ZpZC8iLCAKICAgICAgICAgICAgICAgICAgICAgIHN1YnN0cihmZWNoYV9ob3ksIDYsIDcpLCAiXyIsIHN1YnN0cihmZWNoYV9ob3ksIDksIDEwKSwgIi8iLAogICAgICAgICAgICAgICAgICAgICAgc3Vic3RyKGZlY2hhX2hveSwgNiwgNyksICJfIiwgc3Vic3RyKGZlY2hhX2hveSwgOSwgMTApLAogICAgICAgICAgICAgICAgIl9DU1ZfIiwgdGJsX3RpcG8sICIuY3N2IikKICAKICB0YmxzIDwtIGxhcHBseShVUkxzW2MoMSwyLDMsNCldLCBmcmVhZCkKICAKICBjc3ZfZW5jb2RpbmcgPC0gIm1hY3JvbWFuIiAjIldJTkRPV1MtMTI1MiIgCiAgcG9zaXRpdm9zIDwtIGFzLmRhdGEudGFibGUobGFwcGx5KHRibHNbWzFdXSwgaWNvbnYsIGZyb20gPSBjc3ZfZW5jb2RpbmcsIHRvID0gIlVURi04IiApKVsKICAgICwgdGlwbyA6PSAicG9zaXRpdm9zIl1bCiAgICAgIGNhbnRvbiAhPSAiIiB8ICFpcy5uYShjYW50b24pXQogIHJlY3VwZXJhZG9zIDwtIGFzLmRhdGEudGFibGUobGFwcGx5KHRibHNbWzJdXSwgaWNvbnYsIGZyb20gPSBjc3ZfZW5jb2RpbmcsIHRvID0gIlVURi04IiApKVsKICAgICwgdGlwbyA6PSAicmVjdXBlcmFkb3MiXVsKICAgICAgY2FudG9uICE9ICIiIHwgIWlzLm5hKGNhbnRvbildCiAgZmFsbGVjaWRvcyA8LSBhcy5kYXRhLnRhYmxlKGxhcHBseSh0YmxzW1szXV0sIGljb252LCBmcm9tID0gY3N2X2VuY29kaW5nLCB0byA9ICJVVEYtOCIgKSlbCiAgLCB0aXBvIDo9ICJmYWxsZWNpZG9zIl1bCiAgICBjYW50b24gIT0gIiIgfCAhaXMubmEoY2FudG9uKV0KICAjIGZhbGxlY2lkb3MgPC0gZnJlYWQoIjA1XzA0X0NTVl9GQUxMRUNJRE9TX2Nzdi5jc3YiKVsKICAjICwgdGlwbyA6PSAiZmFsbGVjaWRvcyJdWwogICMgICBjYW50b24gIT0gIiIgfCAhaXMubmEoY2FudG9uKV0KICBnZW5lcmFsIDwtIGFzLmRhdGEudGFibGUobGFwcGx5KHRibHNbWzRdXSwgaWNvbnYsIGZyb20gPSBjc3ZfZW5jb2RpbmcsIHRvID0gIlVURi04IiApKVsKICAgIEZFQ0hBICE9ICIiXQogIAogIGNhbnRvbmVzIDwtIHJiaW5kbGlzdChsaXN0KHBvc2l0aXZvcywgcmVjdXBlcmFkb3MsIGZhbGxlY2lkb3MpLCB1c2UubmFtZXM9VFJVRSwgZmlsbCA9IFRSVUUpCiAgCiAgY2FudG9uZXNfdGlkeV8xIDwtIG1lbHQoY2FudG9uZXNbLCAhYygiY29kX3Byb3ZpbiIsICJjb2RfY2FudG9uIildLAogICAgICAgICAgICAgICAgICAgICAgIGlkLnZhcnMgPSBjKCJwcm92aW5jaWEiLCAiY2FudG9uIiwgInRpcG8iKSwKICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5uYW1lID0gImZlY2hhIiwKICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5uYW1lID0gImNhc29zIilbCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aW5jaWEgIT0gIiIKICAgICAgICAgICAgICAgICAgICAgICBdWwogICAgICAgICAgICAgICAgICAgICAgICAgLCBmZWNoYSA6PSBkbXkoZmVjaGEpCiAgICAgICAgICAgICAgICAgICAgICAgXVssIGNhc29zIDo9IGFzLmludGVnZXIoY2Fzb3MpXQogIAogIGFjdGl2b3MgPC0gZGNhc3QoY2FudG9uZXNfdGlkeV8xW2lzLm5hKGNhc29zKSwgY2Fzb3MgOj0gMF0sIAogICAgICAgICAgICAgICAgICAgZmVjaGEgKyBjYW50b24gKyBwcm92aW5jaWEgfiB0aXBvLCB2YWx1ZS52YXIgPSAiY2Fzb3MiKVsKICAgICwgYDo9YChjYXNvcyA9IHBvc2l0aXZvcyAtIGZhbGxlY2lkb3MgLSByZWN1cGVyYWRvcywKICAgICAgICAgICB0aXBvID0gImFjdGl2b3MiKQogIF1bCiAgICAsIC4oZmVjaGEsIGNhbnRvbiwgcHJvdmluY2lhLCBjYXNvcywgdGlwbykKICBdCiAgCiAgY2FudG9uZXNfdGlkeV8yIDwtIHJiaW5kbGlzdChsaXN0KGNhbnRvbmVzX3RpZHlfMSwgYWN0aXZvcyksIHVzZS5uYW1lcyA9IFRSVUUsIGZpbGwgPSBUUlVFKQogIAogIHNldG9yZGVyKGNhbnRvbmVzX3RpZHlfMiwgLWNhbnRvbiwgdGlwbywgZmVjaGEpCiAgY2FudG9uZXNfY2Fzb3MgPC0gY2FudG9uZXNfdGlkeV8yW3RpcG8gPT0gInBvc2l0aXZvcyIgJiBmZWNoYSA9PSBmZWNoYV9ob3kgJiBjYXNvcyA+IDAsIGNhbnRvbl0KICAKICBjYW50b25lc190aWR5IDwtIGNhbnRvbmVzX3RpZHlfMltjYW50b24gJWluJSBjYW50b25lc19jYXNvc11bCiAgICAsIGA6PWAobnVldm9zID0gY2Fzb3MgLSBzaGlmdChjYXNvcywgbiA9IDFMLCBmaWxsID0gMCwgdHlwZSA9ICJsYWciKSwKICAgICAgICAgICBJRCA9IHNlcV9sZW4oLk4pKSwgCiAgICBieSA9IGMoImNhbnRvbiIsICJ0aXBvIildCiAgIyBbCiAgIyAgICAgbnVldm9zIDwgMCwgbnVldm9zIDo9IDAKICAjICAgXQogIAogIHNldG5hbWVzKGdlbmVyYWwsIHRvbG93ZXIobmFtZXMoZ2VuZXJhbCkpKQogIHJlc3VtZW4gPC0gZ2VuZXJhbFtmZWNoYSAhPSAiIgogIF1bCiAgICAsIGA6PWAoZmVjaGEgPSBhcy5EYXRlKGRteShmZWNoYSkpLCAjYXMuaW50ZWdlcihmZWNoYSksIG9yaWdpbiA9ICIxODk5LTEyLTMwIgogICAgICAgICAgIGFjdGl2b3MgPSBhcy5pbnRlZ2VyKHBvc2l0aXZvcykgLSBhcy5pbnRlZ2VyKHJlY3VwZXJhZG9zKSAtIGFzLmludGVnZXIoZmFsbGVjaWRvcyksCiAgICAgICAgICAgYHBlcnMuIHBydWViYXNgID0gYXMuaW50ZWdlcihkZXNjYXJ0YWRvcykgKyBhcy5pbnRlZ2VyKHBvc2l0aXZvcyksCiAgICAgICAgICAgYCUgcHJ1ZWJhcyArYCA9IHJvdW5kKAogICAgICAgICAgICAgYXMuaW50ZWdlcihwb3NpdGl2b3MpLyhhcy5pbnRlZ2VyKGRlc2NhcnRhZG9zKSArIGFzLmludGVnZXIocG9zaXRpdm9zKSkqMTAwLCAxKSldCiAgCiAgbnVldmFzX3ByY3RfcHJiX3BvcyA8LSByZXN1bWVuWywgLihmZWNoYSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWV2YXMgPSByb3VuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuaW50ZWdlcihudWVfcG9zaSkvKGFzLmludGVnZXIobnVlX2Rlc2NhcikgKyBhcy5pbnRlZ2VyKG51ZV9wb3NpKSkqMTAwLCAxKSldCiAgc2V0b3JkZXIobnVldmFzX3ByY3RfcHJiX3BvcywgZmVjaGEpCiAgbnVldmFzX3ByY3RfcHJiX3BvcyA8LSBudWV2YXNfcHJjdF9wcmJfcG9zJG51ZXZhcwogIAogIHJlc3VtZW5fdGlkeSA8LSBtZWx0KHJlc3VtZW4sCiAgICAgICAgICAgICAgICAgICAgICAgaWQudmFycyA9ICJmZWNoYSIsCiAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUubmFtZSA9ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUubmFtZSA9ICJjYXNvcyIpWwogICAgICAgICAgICAgICAgICAgICAgICAgLCBjYXNvcyA6PSBhcy5udW1lcmljKGNhc29zKQogICAgICAgICAgICAgICAgICAgICAgIF0KICBzZXRvcmRlcihyZXN1bWVuX3RpZHksIHZhcmlhYmxlLCBmZWNoYSkKICByZXN1bWVuX3RpZHlbCiAgICAsIGA6PWAobnVldm9zID0gY2Fzb3MgLSBzaGlmdChjYXNvcywgbiA9IDFMLCBmaWxsID0gMCwgdHlwZSA9ICJsYWciKSwKICAgICAgICAgICBJRCA9IHNlcV9sZW4oLk4pKSwgCiAgICBieSA9IHZhcmlhYmxlXVsKICAgICAgLCBJRF8yIDo9IHNlcV9sZW4oLk4pCiAgICBdCiAgCiAgcmVzdW1lbl90aWR5W3ZhcmlhYmxlID09ICIlIHBydWViYXMgKyIsIAogICAgICAgICAgICAgICBudWV2b3MgOj0gbnVldmFzX3ByY3RfcHJiX3Bvc10KICAKICBjYW50X3Jlc3VtIDwtIGxpc3QoKQogIGNhbnRfcmVzdW0kcmVzdW1lbiA8LSByZXN1bWVuX3RpZHkKICBjYW50X3Jlc3VtJGNhbnRvbmVzIDwtIGNhbnRvbmVzX3RpZHkKICAKICByZXR1cm4oY2FudF9yZXN1bSkKfQoKYGBgCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQp0X2NudHJ5cyA8LSBmdW5fcGFpc2VzKGZlY2hhX2hveSwgcGFpc2VzKQpmZWNoYV9taW4gPC0gdF9jbnRyeXNbY2Fzb3MgPT0gMSwgLlNEW3doaWNoLm1pbihmZWNoYSldXSRmZWNoYQoKZmVjaGFfZGlhdW5vIDwtIHRfY250cnlzWwogIHRpcG8gPT0gInBvc2l0aXZvcyIgJiBjYXNvcyA+IDAgXVsKICAgICwgLlNEW3doaWNoLm1pbihmZWNoYSldLCBieSA9ICJDb3VudHJ5L1JlZ2lvbiIgXVsKICAgICAgLCAuKGBDb3VudHJ5L1JlZ2lvbmAsCiAgICAgICAgICBmZWNoYV9kaWF1bm8gPSBmZWNoYSldCiAgCnRfZ3RfZGlhdW5vIDwtIGZlY2hhX2RpYXVub1sKICB0X2NudHJ5cywgb249YyhgQ291bnRyeS9SZWdpb25gID0gIkNvdW50cnkvUmVnaW9uIikgXVsKICAgIGZlY2hhID49IGZlY2hhX2RpYXVub11bCiAgICAgIG9yZGVyKGBDb3VudHJ5L1JlZ2lvbmAsIHRpcG8sIGZlY2hhKSBdWwogICAgICAgIGNhc29zID4gMCwgCiAgICAgICAgYDo9YChudW1fZGlhID0gYXMuaW50ZWdlcihkaWZmdGltZShmZWNoYSwgZmVjaGFfZGlhdW5vLCB1bml0cyA9ICJkYXlzIikgKyAxKSwKICAgICAgICAgICAgIG51ZXZvc19jYXNvcyA9IGNhc29zIC0gc2hpZnQoY2Fzb3MsIGZpbGwgPSAwKSwKICAgICAgICAgICAgIHByY3RfZGlmX2Nhc29zID0gcm91bmQoKGNhc29zIC0gc2hpZnQoY2Fzb3MsIGZpbGwgPSAwKSkvKHNoaWZ0KGNhc29zLCBmaWxsID0gTkEpKSoxMDAsIDEpKSwgCiAgICAgICAgYnkgPSBjKCJDb3VudHJ5L1JlZ2lvbiIsICJ0aXBvIiwgImNvZF9wYWlzIiwgInBhaXMiKSBdCgp0X2d0X2RpYXVub1tpcy5uYSh0X2d0X2RpYXVubyldIDwtIDAKCm1heF9kaWFfQ1IgPC0gbWF4KHRfZ3RfZGlhdW5vW2BDb3VudHJ5L1JlZ2lvbmAgPT0gIkNvc3RhIFJpY2EiICYgdGlwbyA9PSAicG9zaXRpdm9zIiwgbnVtX2RpYV0pCgpzZXRvcmRlcih0X2d0X2RpYXVubywgLWBDb3VudHJ5L1JlZ2lvbmAsIGZlY2hhKQp0X2d0X2RpYXVubyRgQ291bnRyeS9SZWdpb25gIDwtIGZhY3Rvcih0X2d0X2RpYXVubyRgQ291bnRyeS9SZWdpb25gLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzPXVuaXF1ZSh0X2d0X2RpYXVubyRgQ291bnRyeS9SZWdpb25gKSkKCnBvYmxhY2lvbiA8LSBmcmVhZCgiV1BQMjAxOV9Ub3RhbFBvcHVsYXRpb25CeVNleC5jc3YiKVsKICBUaW1lID09IDIwMjAgJiBWYXJpYW50ID09ICJNZWRpdW0iLAogIC4oTG9jYXRpb24sIAogICAgUG9wVG90YWwgPSBhcy5pbnRlZ2VyKFBvcFRvdGFsKjEwMDApKV0KCnRiX2dlbmVyYWwgPC0gbWVyZ2UodF9ndF9kaWF1bm8sIHBvYmxhY2lvbiwgYnkueCA9ICJDb3VudHJ5L1JlZ2lvbiIsIGJ5LnkgPSAiTG9jYXRpb24iLCBhbGwueCA9IFRSVUUpCgp0Yl9nZW5lcmFsWwogICwgY2Fzb3NfMTBrIDo9IGNhc29zKjEwMDAwMC9Qb3BUb3RhbF0KCmNhbnRfcmVzdW1lbiA8LSBmdW5fY2FudG9uZXNfcmVzdW1lbihmZWNoYV9ob3kpCmNhbnRvbmVzX3RpZHkgPC0gY2FudF9yZXN1bWVuJGNhbnRvbmVzCgpjYW50b25lc19zaW1wIDwtIHN0X3JlYWQoImNhbnRvbmVzLmdlb2pzb24iKQoKY2FudG9uZXNfbWFwYSA8LSBkY2FzdChjYW50b25lc190aWR5LCAgZmVjaGEgKyBwcm92aW5jaWEgKyBjYW50b24gfiB0aXBvLCB2YWx1ZS52YXIgPSAiY2Fzb3MiKQpjYW50b25lc19tYXBhX3NmIDwtIG1lcmdlKGNhbnRvbmVzX3NpbXAsIGNhbnRvbmVzX21hcGEsIGJ5ID0gYygiY2FudG9uIiwgInByb3ZpbmNpYSIpKQoKcHJvdmluY2lhcyA9IGNhbnRvbmVzX3RpZHlbCiAgLCAuKHBvc2l0aXZvcyA9IHN1bShjYXNvc1t0aXBvID09ICJwb3NpdGl2b3MiXSwgbmEucm0gPSBUUlVFKSwKICAgICAgcmVjdXBlcmFkb3MgPSBzdW0oY2Fzb3NbdGlwbyA9PSAicmVjdXBlcmFkb3MiXSwgbmEucm0gPSBUUlVFKSwKICAgICAgYWN0aXZvcyA9IHN1bShjYXNvc1t0aXBvID09ICJhY3Rpdm9zIl0sIG5hLnJtID0gVFJVRSksCiAgICAgIGZhbGxlY2lkb3MgPSBzdW0oY2Fzb3NbdGlwbyA9PSAiZmFsbGVjaWRvcyJdLCBuYS5ybSA9IFRSVUUpKSwgCiAgYnkgPSBjKCJwcm92aW5jaWEiLCAiZmVjaGEiKQpdWwogICwgbWF4X2Nhc29zIDo9IG1heChwb3NpdGl2b3MpLCBieSA9IGMoInByb3ZpbmNpYSIpCl0KCnNldG9yZGVyKHByb3ZpbmNpYXMsIHByb3ZpbmNpYSkKCnByb3ZpbmNpYXMkcHJvdmluY2lhIDwtIGZhY3Rvcihwcm92aW5jaWFzJHByb3ZpbmNpYSwgbGV2ZWxzPXVuaXF1ZShwcm92aW5jaWFzJHByb3ZpbmNpYSkpCgpDUl9kZXRhbGxlcyA8LSBjYW50X3Jlc3VtZW4kcmVzdW1lbgpDUl9kZXRhbGxlc1tmZWNoYSA9PSBsdWJyaWRhdGU6OnltZCgiMjAyMC0wNC0yNiIpICYgdmFyaWFibGUgPT0gImZhbGxlY2lkb3MiLAogICAgICAgICAgICBgOj1gKGNhc29zID0gc2hpZnQoY2Fzb3MpLAogICAgICAgICAgICAgICAgIG51ZXZvcyA9IDApXQpgYGAKCgoKIyMgQ29zdGEgUmljYSBlbiBsYSByZWdpw7NuIHsudGFic2V0fQojIyMgQ2Fzb3MgYWN1bXVsYWRvcwoKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy5hbGlnbj0iY2VudGVyIn0KIyBjb2xzIDwtIGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLCAiI2ZiOWE5OSIsICIjZTMxYTFjIiwKIyAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwgIiNjYWIyZDYiLCAiIzZhM2Q5YSIsIiNDREJFNzAiICwiI2IxNTkyOCIpCiMgYnJld2VyLnBhbCgxMiwgIlBhaXJlZCIpCgojIGNvbF9wYWlzZXMgPC0gY29sb3JSYW1wUGFsZXR0ZShjb2xzKShsZW5ndGgocGFpc2VzKSkKY29sX3BhaXNlcyA8LSBicmV3ZXIucGFsKGxlbmd0aChwYWlzZXMpLCAiUGFpcmVkIikKCgpnMV9nIDwtIGdncGxvdCh0X2NudHJ5c1sKICAjZmVjaGEgPj0gZmVjaGFfbWluICYgCiAgZmVjaGEgPj0gZG15KCIwOC8wMy8yMDIwIikgJgogICAgY2Fzb3MgPiAwXVsKICAgICAgdGlwbyA9PSAiY29udGFnaW9zIiAmIGNhc29zIDwgMjAsIGNhc29zIDo9IE5BXSwgCiAgYWVzKHggPSBmZWNoYSwgeSA9IGNhc29zLCBncm91cCA9IHBhaXMsIGNvbCA9IHBhaXMpKSArIAogIGdlb21fbGluZShhbHBoYSA9IDAuOCkgKwogICMgZ2VvbV9wb2ludF9pbnRlcmFjdGl2ZSgKICAjICAgYWVzKHRvb2x0aXAgPSBwYXN0ZTAoCiAgIyAgICAgcGFpcywgIlxuIiwgCiAgIyAgICAgcGFzdGUwKGRheShmZWNoYSksICIgZGUgIiwgbW9udGgoZmVjaGEsIGxhYmVsPVRSVUUsIGFiYnI9RkFMU0UpKSwgIlxuIiwgCiAgIyAgICAgY2Fzb3MsIiBjYXNvcyIpLAogICMgICAgIGRhdGFfaWQgPSBJRCksCiAgIyAgIHNpemUgPSAwLjUsIGFscGhhID0gMC43KSArCiAgc2NhbGVfeV9jb250aW51b3VzKHRyYW5zID0gImxvZzEwIiwgbGFiZWxzPWNvbW1hX2Zvcm1hdChhY2N1cmFjeSA9IDEpKSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjEgbW9udGgiLCAKICAgICAgICAgICAgICAgbWlub3JfYnJlYWtzID0gTlVMTCwKICAgICAgICAgICAgICAgZGF0ZV9sYWJlbHMgPSBmb3JtYXRvX2ZlY2hhKSArCiAgIyBzY2FsZV9jb2xvdXJfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGNvbF9wYWlzZXMpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHRpcG8pLCBzY2FsZXMgPSAiZnJlZSIpICsKICB0aGVtZV9saWdodCgpICsKICBsYWJzKHggPSAiIiwKICAgICAgIHkgPSAiQ2Fzb3MgcmVwb3J0YWRvcyIsCiAgICAgICBjb2wgPSAiIiwKICAgICAgIHRpdGxlID0gIiIsCiAgICAgICBzdWJ0aXRsZSA9ICIiKSArCiAgdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTYwLCBoanVzdD0xKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiLAogICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDAsNSwwLDApLCAibW0iKSkKCmdpcmFmZShnZ29iaiA9IGcxX2csCiAgICAgICAjIG9wdGlvbnMgPSBsaXN0KG9wdHNfdG9vbHRpcCh1c2VfZmlsbCA9IFRSVUUsCiAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZ4ID0gMTAsIG9mZnkgPSAxMCwKICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcyA9ICJjb2xvcjp3aGl0ZTsiKSwKICAgICAgICMgICAgICAgICAgICAgICAgb3B0c19ob3Zlcihjc3MgPSAic3Ryb2tlOm9yYW5nZTsKICAgICAgICMgICAgICAgICAgIHN0cm9rZS13aWR0aDoyOyIpLAogICAgICAgIyAgICAgICAgICAgb3B0c190b29sYmFyKHNhdmVhc3BuZyA9IEZBTFNFKSksCiAgICAgICB3aWR0aF9zdmcgPSA3LCBoZWlnaHRfc3ZnID0gNSkKCmBgYAoKIyMjIENhc29zIGRlc2RlIGVsIGTDrWEgMQoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLmFsaWduPSJjZW50ZXIifQpnMl9nIDwtIGdncGxvdCh0X2d0X2RpYXVub1tudW1fZGlhIDw9IG1heF9kaWFfQ1IgKyA1XSwgCiAgICAgICAgICAgICBhZXMoeCA9IG51bV9kaWEsIHkgPSBjYXNvcywgZ3JvdXAgPSBwYWlzLCBjb2wgPSBwYWlzKSkgKyAKICBnZW9tX2xpbmUoc2l6ZSA9IDAuNSwgYWxwaGEgPSAwLjgpICsKICAjIGdlb21fcG9pbnRfaW50ZXJhY3RpdmUoCiAgIyAgIGFlcyh0b29sdGlwID0gcGFzdGUwKAogICMgICBwYWlzLCAiXG4iLCAKICAjICAgcGFzdGUwKGRheShmZWNoYSksICIgZGUgIiwgbW9udGgoZmVjaGEsIGxhYmVsPVRSVUUsIGFiYnI9RkFMU0UpKSwgIlxuIiwgCiAgIyAgIGNhc29zLCIgY2Fzb3MiKSwgCiAgIyAgIGRhdGFfaWQgPSBJRCksCiAgIyAgIHNpemUgPSAwLjUsIGFscGhhID0gMC43KSArCiAgc2NhbGVfeV9jb250aW51b3VzKHRyYW5zID0gImxvZzEwIiwgbGFiZWxzPWNvbW1hX2Zvcm1hdChhY2N1cmFjeSA9IDEpKSArCiAgc2NhbGVfeF9jb250aW51b3VzKG1pbm9yX2JyZWFrcyA9IE5VTEwsIGxpbWl0cyA9IGMoMSwgTkEpKSArIAogICNnZW9tX3Ntb290aChtZXRob2Q9ImxtIiwgZm9ybXVsYT0gKHkgfiBleHAoMikpLCBzZT1GQUxTRSwgY29sb3I9MSkgKwogICMgc2NhbGVfY29sb3VyX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjb2xfcGFpc2VzKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyh0aXBvKSwgc2NhbGUgPSAiZnJlZSIpICsgCiAgdGhlbWVfbGlnaHQoKSArCiAgbGFicyh4ID0gIkTDrWFzIGx1ZWdvIGRlIHByaW1lcmEgZGV0ZWNjacOzbiIsCiAgICAgICB5ID0gIkNhc29zIHJlcG9ydGFkb3MiLAogICAgICAgY29sID0gIiIsCiAgICAgICB0aXRsZSA9ICIiLAogICAgICAgc3VidGl0bGUgPSAiIikgKwogICMgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG5yb3cgPSAxKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIsCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoMCwwLDAsMCksICJtbSIpKQoKZ2lyYWZlKGdnb2JqID0gZzJfZywKICAgICAgICMgb3B0aW9ucyA9IGxpc3Qob3B0c190b29sdGlwKHVzZV9maWxsID0gVFJVRSwKICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnggPSAxMCwgb2ZmeSA9IDEwLAogICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzID0gImNvbG9yOndoaXRlOyIpLAogICAgICAgIyAgICAgICAgICAgICAgICBvcHRzX2hvdmVyKGNzcyA9ICJzdHJva2U6b3JhbmdlOwogICAgICAgIyAgICAgICAgICAgc3Ryb2tlLXdpZHRoOjI7IiksCiAgICAgICAjICAgICAgICAgICBvcHRzX3Rvb2xiYXIoc2F2ZWFzcG5nID0gRkFMU0UpKSwKICAgICAgIHdpZHRoX3N2ZyA9IDcsIGhlaWdodF9zdmcgPSA1KQpgYGAKCiMjIyBDYXNvcyBwb3IgMTAwIG1pbCBoYWJpdGFudGVzCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcuYWxpZ249ImNlbnRlciJ9Cmc0X2cgPC0gZ2dwbG90KHRiX2dlbmVyYWxbI2ZlY2hhID49IGZlY2hhX21pbiAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmVjaGEgPj0gZG15KCIyMC8wMy8yMDIwIildLCAKICAgICAgICAgICAgIGFlcyh4ID0gZmVjaGEsIHkgPSBjYXNvc18xMGssIGdyb3VwID0gcGFpcywgY29sID0gcGFpcykpICsgCiAgZ2VvbV9saW5lKGFscGhhID0gMC44KSArCiAgIyBnZW9tX3BvaW50X2ludGVyYWN0aXZlKAogICMgICBhZXModG9vbHRpcCA9IHBhc3RlMCgKICAjICAgICBwYWlzLCAiXG4iLCAKICAjICAgICBwYXN0ZTAoZGF5KGZlY2hhKSwgIiBkZSAiLCBtb250aChmZWNoYSwgbGFiZWw9VFJVRSwgYWJicj1GQUxTRSkpLCAiXG4iLCAKICAjICAgICByb3VuZChjYXNvc18xMGssMSksIiBjYXNvcy8xMDBrIGhhYi4iKSwKICAjICAgICBkYXRhX2lkID0gSUQpLAogICMgICBzaXplID0gMC41LCBhbHBoYSA9IDAuNykgKyAKICBzY2FsZV95X2NvbnRpbnVvdXModHJhbnMgPSAibG9nMTAiLCBsYWJlbHM9Y29tbWFfZm9ybWF0KGFjY3VyYWN5ID0gMC4wMSkpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMSBtb250aCIsIAogICAgICAgICAgICAgICBtaW5vcl9icmVha3MgPSBOVUxMLAogICAgICAgICAgICAgICBkYXRlX2xhYmVscyA9ICBmb3JtYXRvX2ZlY2hhKSArCiAgIyBzY2FsZV9jb2xvdXJfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGNvbF9wYWlzZXMpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHRpcG8pLCBzY2FsZSA9ICJmcmVlIikgKyAKICB0aGVtZV9saWdodCgpICsKICBsYWJzKHggPSAiIiwKICAgICAgIHkgPSAiQ2Fzb3MgcG9yIGNhZGEgMTAwLDAwMCBoYWJpdGFudGVzIiwKICAgICAgIGNvbCA9ICIiLAogICAgICAgdGl0bGUgPSAiIiwKICAgICAgIHN1YnRpdGxlID0gIiIpICsKICB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9NjAsIGhqdXN0PTEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIsCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoMCwwLDAsNSksICJtbSIpKQoKZ2lyYWZlKGdnb2JqID0gZzRfZywKICAgICAgICMgb3B0aW9ucyA9IGxpc3Qob3B0c190b29sdGlwKHVzZV9maWxsID0gVFJVRSwKICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnggPSAxMCwgb2ZmeSA9IDEwLAogICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzID0gImNvbG9yOndoaXRlOyIpLAogICAgICAgIyAgICAgICAgICAgICAgICBvcHRzX2hvdmVyKGNzcyA9ICJzdHJva2U6b3JhbmdlOwogICAgICAgIyAgICAgICAgICAgc3Ryb2tlLXdpZHRoOjI7IiksCiAgICAgICAjICAgICAgICAgICBvcHRzX3Rvb2xiYXIoc2F2ZWFzcG5nID0gRkFMU0UpKSwKICAgICAgIHdpZHRoX3N2ZyA9IDcsIGhlaWdodF9zdmcgPSA1KQpgYGAKCiMjIHstfQoKKiBMb3MgY2Fzb3MgYWN0aXZvcyBzZSBjYWxjdWxhbiBjb21vOiAKPGRpdiBhbGlnbj0iY2VudGVyIj4kYWN0aXZvcyA9IHBvc2l0aXZvcyAtIGZhbGxlY2lkb3MgLSByZWN1cGVyYWRvcyQ8L2Rpdj4KCioqKgoKIyMgQ2Fzb3MgZW4gQ29zdGEgUmljYQoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLmFsaWduPSJjZW50ZXIifQp2X3Jlc3VtZW5EaWFyaW9fQ1IgPC0gZ2dwbG90KAogIENSX2RldGFsbGVzWyB2YXJpYWJsZSAlaW4lIGMoInBvc2l0aXZvcyIsICJyZWN1cGVyYWRvcyIgLCAiZmFsbGVjaWRvcyIsICJhY3Rpdm9zIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY2FydGFkb3MiLCAicGVycy4gcHJ1ZWJhcyIsICIlIHBydWViYXMgKyIpXSwgCiAgYWVzKHggPSBmZWNoYSwgeSA9IG51ZXZvcykpICsKICBnZW9tX2NvbF9pbnRlcmFjdGl2ZSgKICAgICAgICBhZXModG9vbHRpcCA9IHBhc3RlMChkYXkoZmVjaGEpLCAiIGRlICIsIAogICAgICAgICAgICAgICAgICAgICAgICAgbW9udGgoZmVjaGEsIGxhYmVsPVRSVUUsIGFiYnI9RkFMU0UpLCAiXG4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWxvcjogIiwgbnVldm9zKSwKICAgICAgZGF0YV9pZCA9IElEXzIpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyh2YXJpYWJsZSksIHNjYWxlcyA9ICJmcmVlIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBmdW5jdGlvbih4KSB1bmlxdWUoZmxvb3IocHJldHR5KHNlcSgwLCAobWF4KHgpICsgMSkgKiAxLjEpKSkpKSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjIgd2VlayIsIAogICAgICAgICAgICAgICBtaW5vcl9icmVha3MgPSBOVUxMLAogICAgICAgICAgICAgICBkYXRlX2xhYmVscyA9ICBmb3JtYXRvX2ZlY2hhKSArIAogIHRoZW1lX2xpZ2h0KCkgKwogIGxhYnMoeCA9ICIiLAogICAgICAgeSA9ICJWYWxvcmVzIHJlcG9ydGFkb3MgYWwgZMOtYSIsCiAgICAgICB0aXRsZSA9ICJWYWxvcmVzIGRpYXJpb3MiKSArIAogICAgdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTYwLCBoanVzdD0xKSwKICAgICAgICAjIGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIiwgbGVnZW5kLmJveCA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoNSwwLDAsNSksICJtbSIpLAogICAgICAgIHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gNCkpCgp2X3Jlc3VtZW5BY3VtX0NSIDwtIGdncGxvdCgKICBDUl9kZXRhbGxlc1sgdmFyaWFibGUgJWluJSBjKCJwb3NpdGl2b3MiLCAicmVjdXBlcmFkb3MiICwgImZhbGxlY2lkb3MiLCAiYWN0aXZvcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NhcnRhZG9zIiwgInBlcnMuIHBydWViYXMiLCAiJSBwcnVlYmFzICsiKV0sIAogIGFlcyh4ID0gZmVjaGEsIHkgPSBjYXNvcykpICsKICBnZW9tX2xpbmUoKSArCiAgZ2VvbV9wb2ludF9pbnRlcmFjdGl2ZSgKICAgIGFlcyh0b29sdGlwID0gcGFzdGUwKGRheShmZWNoYSksICIgZGUgIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICBtb250aChmZWNoYSwgbGFiZWw9VFJVRSwgYWJicj1GQUxTRSksICJcbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgInZhbG9yOiAiLCBjYXNvcyksCiAgICAgICAgZGF0YV9pZCA9IElEXzIpLAogICAgc2l6ZSA9IDAuNSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModmFyaWFibGUpLCBzY2FsZXMgPSAiZnJlZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gZnVuY3Rpb24oeCkgdW5pcXVlKGZsb29yKHByZXR0eShzZXEoMCwgKG1heCh4KSArIDEpICogMS4xKSkpKSkgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIyIHdlZWsiLCAKICAgICAgICAgICAgICAgbWlub3JfYnJlYWtzID0gTlVMTCwKICAgICAgICAgICAgICAgZGF0ZV9sYWJlbHMgPSAgZm9ybWF0b19mZWNoYSkgKyAKICB0aGVtZV9saWdodCgpICsKICBsYWJzKHggPSAiIiwKICAgICAgIHkgPSAiTsO6bWVybyB0b3RhbCIsCiAgICAgICB0aXRsZSA9ICJWYWxvcmVzIGFjdW11bGFkb3MiKSArIAogIHRoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT02MCwgaGp1c3Q9MSksCiAgICAgICAgIyBsZWdlbmQucG9zaXRpb249ImJvdHRvbSIsIGxlZ2VuZC5ib3ggPSAiaG9yaXpvbnRhbCIsIAogICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDUsNSwwLDApLCAibW0iKSwKICAgICAgICBzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDQpKQoKZ2lyYWZlKGdnb2JqID0gcGxvdF9ncmlkKHZfcmVzdW1lbkFjdW1fQ1IsIHZfcmVzdW1lbkRpYXJpb19DUiksCiAgICAgICBvcHRpb25zID0gbGlzdCgKICAgICAgICAgIG9wdHNfdG9vbGJhcihzYXZlYXNwbmcgPSBGQUxTRSksCiAgICAgICAgICBvcHRzX2hvdmVyKGNzcyA9ICJmaWxsOm9yYW5nZTtzdHJva2U6b3JhbmdlO3N0cm9rZS13aWR0aDoxOyIpKSwKICAgICAgIHdpZHRoX3N2ZyA9IDcsIGhlaWdodF9zdmcgPSA3CiAgICAgICApCgpgYGAKCiogVGVuZXIgdmFsb3JlcyAqYWN0aXZvcyBuZWdhdGl2b3MqIGVuIGNhc29zIHBvciBkw61hLCBzaWduaWZpY2EgcXVlIGVzZSBkw61hIGh1Ym8gbcOhcyByZWN1cGVyYWRvcyBxdWUgY2Fzb3MgcG9zaXRpdm9zLgoqICpwZXJzLiBwcnVlYmFzKiBlcyBlbCBuw7ptZXJvIGRlIHBlcnNvbmFzIGEgbGFzIHF1ZSBzZSBsZXMgYXBsaWNhcm9uIHBydWViYXMgKHBvc2l0aXZvcyArIGRlc2NhcnRhZG9zKS4KKiAqJSBwcnVlYmFzICsqIGVzIGVsIHBvcmNlbnRhamUgZGUgbGFzIHBlcnNvbmFzIGEgbGFzIHF1ZSBzZSBsZSBhcGxpY8OzIHBydWViYXMgeSBkaWVyb24gcG9zaXRpdm8uCgojIyMgSG9zcGl0YWxpemFjaW9uZXMKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLmFsaWduPSJjZW50ZXIifQpicmFuZGVkX2NvbG9ycyA8LSBsaXN0KAogICJibHVlIiAgID0gIiMwMDc5OGMiLAogICJyZWQiICAgID0gIiNkMTQ5NWIiLAogICJ5ZWxsb3ciID0gIiNlZGFlNDkiLAogICJncmVlbiIgID0gIiM2NmExODIiLAogICJuYXZ5IiAgID0gIiMyZTQwNTciLCAKICAiZ3JleSIgICA9ICIjOGQ5NmEzIgopCgpicmFuZGVkX3BhbCA8LSBmdW5jdGlvbigKICBwcmltYXJ5ID0gImJsdWUiLCAKICBvdGhlciA9ICJncmV5IiwgCiAgZGlyZWN0aW9uID0gMQopIHsKICBzdG9waWZub3QocHJpbWFyeSAlaW4lIG5hbWVzKGJyYW5kZWRfY29sb3JzKSkKICAKICBmdW5jdGlvbihuKSB7CiAgICBpZiAobiA+IDYpIHdhcm5pbmcoIkJyYW5kZWQgQ29sb3IgUGFsZXR0ZSBvbmx5IGhhcyA2IGNvbG9ycy4iKQogICAgCiAgICBpZiAobiA9PSAyKSB7CiAgICAgIG90aGVyIDwtIGlmICghb3RoZXIgJWluJSBuYW1lcyhicmFuZGVkX2NvbG9ycykpIHsKICAgICAgICBvdGhlcgogICAgICB9IGVsc2UgewogICAgICAgIGJyYW5kZWRfY29sb3JzW290aGVyXQogICAgICB9CiAgICAgIGNvbG9yX2xpc3QgPC0gYyhvdGhlciwgYnJhbmRlZF9jb2xvcnNbcHJpbWFyeV0pCiAgICB9IGVsc2UgewogICAgICBjb2xvcl9saXN0IDwtIGJyYW5kZWRfY29sb3JzWzE6bl0KICAgIH0KICAgIAogICAgY29sb3JfbGlzdCA8LSB1bm5hbWUodW5saXN0KGNvbG9yX2xpc3QpKQogICAgaWYgKGRpcmVjdGlvbiA+PSAwKSBjb2xvcl9saXN0IGVsc2UgcmV2KGNvbG9yX2xpc3QpCiAgfQp9CgpzY2FsZV9maWxsX2JyYW5kZWRfZCA8LSBmdW5jdGlvbigKICBwcmltYXJ5ID0gImJsdWUiLCAKICBvdGhlciA9ICJncmV5IiwgCiAgZGlyZWN0aW9uID0gMSwgCiAgLi4uCikgewogIGdncGxvdDI6OmRpc2NyZXRlX3NjYWxlKAogICAgImZpbGwiLCAiYnJhbmRlZCIsIAogICAgYnJhbmRlZF9wYWwocHJpbWFyeSwgb3RoZXIsIGRpcmVjdGlvbiksIAogICAgLi4uCiAgKQp9CgpzY2FsZV9jb2xfYnJhbmRlZF9kIDwtIGZ1bmN0aW9uKAogIHByaW1hcnkgPSAiYmx1ZSIsIAogIG90aGVyID0gImdyZXkiLCAKICBkaXJlY3Rpb24gPSAxLCAKICAuLi4KKSB7CiAgZ2dwbG90Mjo6ZGlzY3JldGVfc2NhbGUoCiAgICAiY29sb3VyIiwgImJyYW5kZWQiLCAKICAgIGJyYW5kZWRfcGFsKHByaW1hcnksIG90aGVyLCBkaXJlY3Rpb24pLCAKICAgIC4uLgogICkKfQoKc2NhbGVfZmlsbF9icmFuZGVkX2QgPC0gc2NhbGVfZmlsbF9icmFuZGVkX2QKc2NhbGVfY29sX2JyYW5kZWRfZCA8LSBzY2FsZV9jb2xfYnJhbmRlZF9kCgplZGFkZXMgPC0gQ1JfZGV0YWxsZXNbdmFyaWFibGUlaW4lIGMoImFkdWxfcG9zaSIsICJhbV9wb3NpIiwgIm1lbm9yX3Bvc2kiKSAmCiAgICAgICAgICAgICAgICAgICAgICAgIGZlY2hhID4gbHVicmlkYXRlOjpkbXkoIjA5LzMvMjAyMCIpXQpob3NwaXRhbGl6YWNpb24gPC0gQ1JfZGV0YWxsZXNbdmFyaWFibGUgJWluJSBjKCJzYWxvbiIsICJ1Y2kiKSAmCiAgICAgICAgICAgICAgICAgICAgICAgIGZlY2hhID4gbHVicmlkYXRlOjpkbXkoIjA5LzMvMjAyMCIpXQpzZXhvIDwtIENSX2RldGFsbGVzW3ZhcmlhYmxlICVpbiUgYygibXVqX3Bvc2kiLCAiaG9tX3Bvc2kiKSAmCiAgICAgICAgICAgICAgICAgICAgICAgIGZlY2hhID4gbHVicmlkYXRlOjpkbXkoIjA5LzMvMjAyMCIpXQoKIyBnX2VkYWRlcyA8LSBnZ3Bsb3QoZWRhZGVzWywgdmFyaWFibGUgOj0gZmNhc2UodmFyaWFibGUgPT0gImFkdWxfcG9zaSIsICJBZHVsdG8iLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSA9PSAiYW1fcG9zaSIsICJBZHVsdG8gTWF5b3IiLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSA9PSAibWVub3JfcG9zaSIsICJNZW5vciIpXSwKIyAgICAgICAgYWVzKHggPSBmZWNoYSwgeSA9IGNhc29zLCBncm91cCA9IHZhcmlhYmxlLCBjb2wgPSB2YXJpYWJsZSkpICsKIyAgIGdlb21fbGluZSgpICsKIyAgICMgZ2VvbV9wb2ludF9pbnRlcmFjdGl2ZSgKIyAgICMgICBhZXModG9vbHRpcCA9IHBhc3RlMCgKIyAgICMgICAgIHBhc3RlMChkYXkoZmVjaGEpLCAiIGRlICIsIG1vbnRoKGZlY2hhLCBsYWJlbD1UUlVFLCBhYmJyPUZBTFNFKSksICJcbiIsCiMgICAjICAgICB2YXJpYWJsZSwgIlxuIiwKIyAgICMgICAgIGNhc29zLCIgY2Fzb3MiKSwgCiMgICAjICAgICBkYXRhX2lkID0gSUQpLAojICAgIyAgIHNpemUgPSAwLjUpICsgCiMgICAjIGdlb21fdGV4dF9yZXBlbChkYXRhID0gZWRhZGVzW2ZlY2hhID09IHltZChmZWNoYV9ob3kpXSwgCiMgICAjICAgICAgICAgICAgICAgICBhZXMobGFiZWwgPSB2YXJpYWJsZSksCiMgICAjICAgICAgICAgICAgICAgICBudWRnZV94ID0gMSwKIyAgICMgICAgICAgICAgICAgICAgIG5hLnJtID0gVFJVRSkgKyAKIyAgIGdlb21fdGV4dChkYXRhID0gZWRhZGVzW2ZlY2hhID09IHltZChmZWNoYV9ob3kpXSwKIyAgICAgICAgICAgICBhZXMobGFiZWwgPSB2YXJpYWJsZSwgCiMgICAgICAgICAgICAgICAgIHggPSBmZWNoYSArIGRheXMoMiksIAojICAgICAgICAgICAgICAgICB5ID0gY2Fzb3MsIAojICAgICAgICAgICAgICAgICBjb2xvciA9IHZhcmlhYmxlKSkgKyAKIyAgIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIE5BKSwKIyAgICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsMykpICsKIyAgIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIxIHdlZWsiLCAKIyAgICAgICAgICAgICAgICBtaW5vcl9icmVha3MgPSBOVUxMLAojICAgICAgICAgICAgICAgIGRhdGVfbGFiZWxzID0gZm9ybWF0b19mZWNoYSkgKwojICAgdGhlbWVfbGlnaHQoKSArCiMgICBsYWJzKHggPSAiIiwKIyAgICAgICAgeSA9ICJDYXNvcyBhY3VtdWxhZG9zIiwKIyAgICAgICAgY29sID0gIiIpICsgCiMgICB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9NjAsIGhqdXN0PTEpLAojICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAojICAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoNSw1LDAsMCksICJtbSIpKQojIAojIGdfc2V4byA8LSBnZ3Bsb3Qoc2V4b1ssIHZhcmlhYmxlIDo9IGZjYXNlKHZhcmlhYmxlID09ICJtdWpfcG9zaSIsICJNdWplciIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPT0gImhvbV9wb3NpIiwgIkhvbWJyZSIpXSwgCiMgICAgICAgIGFlcyh4ID0gZmVjaGEsIHkgPSBjYXNvcywgZ3JvdXAgPSB2YXJpYWJsZSwgY29sID0gdmFyaWFibGUpKSArCiMgICBnZW9tX2xpbmUoKSArCiMgICAjIGdlb21fcG9pbnRfaW50ZXJhY3RpdmUoCiMgICAjICAgYWVzKHRvb2x0aXAgPSBwYXN0ZTAoCiMgICAjICAgICBwYXN0ZTAoZGF5KGZlY2hhKSwgIiBkZSAiLCBtb250aChmZWNoYSwgbGFiZWw9VFJVRSwgYWJicj1GQUxTRSkpLCAiXG4iLCAKIyAgICMgICAgIHZhcmlhYmxlLCAiXG4iLAojICAgIyAgICAgY2Fzb3MsIiBjYXNvcyIpLCAKIyAgICMgICAgIGRhdGFfaWQgPSBJRCksCiMgICAjICAgc2l6ZSA9IDAuNSkgKwojICAgc2NhbGVfY29sX2JyYW5kZWRfZChwcmltYXJ5ID0gImdyZXkiLAojICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgPSAib3JhbmdlIikgKwojICAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgTkEpLAojICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwzKSkgKwojICAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjEgd2VlayIsIAojICAgICAgICAgICAgICAgIG1pbm9yX2JyZWFrcyA9IE5VTEwsCiMgICAgICAgICAgICAgICAgZGF0ZV9sYWJlbHMgPSBmb3JtYXRvX2ZlY2hhKSArCiMgICB0aGVtZV9saWdodCgpICsKIyAgIGxhYnMoeCA9ICIiLAojICAgICAgICB5ID0gIkNhc29zIGFjdW11bGFkb3MiLAojICAgICAgICBjb2wgPSAiIikgKyAKIyAgIHRoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT02MCwgaGp1c3Q9MSksCiMgICAgICAgICAjIGxlZ2VuZC5rZXkud2lkdGggPSB1bml0KDIsIm1tIiksCiMgICAgICAgICAjIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9NiksCiMgICAgICAgICAjIGxlZ2VuZC5tYXJnaW4gPSB1bml0KGMoMCwwLDAsMCksICJtbSIpLAojICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAojICAgICAgICAgIyBsZWdlbmQucG9zaXRpb24gPSBjKDAuMiwgMC44KSwgCiMgICAgICAgICBwbG90Lm1hcmdpbiA9IHVuaXQoYyg1LDAsMCw1KSwgIm1tIikpCgpnX2hvc3BpIDwtIGdncGxvdChob3NwaXRhbGl6YWNpb25bLCBgOj1gKHZhcmlhYmxlID0gZmNhc2UodmFyaWFibGUgPT0gInVjaSIsICJVQ0kiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSA9PSAic2Fsb24iLCAiU2Fsw7NuIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQgPSBzZXFfbGVuKC5OKSldLAogICAgICAgICAgICAgICAgICBhZXMoeCA9IGZlY2hhLCB5ID0gY2Fzb3MsIGdyb3VwID0gdmFyaWFibGUsIGZpbGwgPSB2YXJpYWJsZSkpICsKICAjIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoKSkgKyAKICBnZW9tX2NvbF9pbnRlcmFjdGl2ZSgKICAgIGFlcyh0b29sdGlwID0gcGFzdGUwKAogICAgICBwYXN0ZTAoZGF5KGZlY2hhKSwgIiBkZSAiLCBtb250aChmZWNoYSwgbGFiZWw9VFJVRSwgYWJicj1GQUxTRSkpLCAiXG4iLAogICAgICB2YXJpYWJsZSwgIlxuIiwKICAgICAgY2Fzb3MsIiBjYXNvcyIpLAogICAgICBkYXRhX2lkID0gSUQpLAogICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpKSArCiAgc2NhbGVfZmlsbF9icmFuZGVkX2Qob3RoZXIgPSAiI2EyZDcyOSIpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMSB3ZWVrIiwgCiAgICAgICAgICAgICAgIG1pbm9yX2JyZWFrcyA9IE5VTEwsCiAgICAgICAgICAgICAgIGRhdGVfbGFiZWxzID0gZm9ybWF0b19mZWNoYSwKICAgICAgICAgICAgICAgbGltaXRzID0gYyhsdWJyaWRhdGU6OmRteSgiMzAtMy0yMDIwIiksIE5BKSkgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIE5BKSwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLDAuMikpICsKICB0aGVtZV9saWdodCgpICsKICBsYWJzKHggPSAiIiwKICAgICAgIHkgPSAiQ2Fzb3MgYWwgZMOtYSIsCiAgICAgICBmaWxsID0gIkhvc3BpdGFsaXphY2nDs246IikgKyAKICB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9NjAsIGhqdXN0PTEpLAogICAgICAgIGxlZ2VuZC5rZXkud2lkdGggPSB1bml0KDIsIm1tIiksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoMSwxLDEsMSksICJtbSIpKQoKIyBhbGluZWFkb3MgPC0gYWxpZ25fcGxvdHMoZ19lZGFkZXMsIGdfc2V4bywgZ19ob3NwaSwgYWxpZ24gPSAnaHYnLCBheGlzID0gJ3JsJykKCiMgZ2lyYWZlKGdnb2JqID0gcGxvdF9ncmlkKGdfZWRhZGVzLCBnX3NleG8sIG5jb2wgPSAyKSwKIyAgICAgICAgIyBvcHRpb25zID0gbGlzdCgKIyAgICAgICAgIyAgIG9wdHNfdG9vbHRpcCh1c2VfZmlsbCA9IFRSVUUpLAojICAgICAgICAjICAgb3B0c190b29sYmFyKHNhdmVhc3BuZyA9IEZBTFNFKSwKIyAgICAgICAgIyAgIG9wdHNfaG92ZXIoY3NzID0gImZpbGw6TlVMTDtzdHJva2U6TlVMTDsiKSksCiMgICAgICAgIHdpZHRoX3N2ZyA9IDYuNSwgaGVpZ2h0X3N2ZyA9IDMpCgpnaXJhZmUoZ2dvYmogPSBnX2hvc3BpLAogICAgICAgb3B0aW9ucyA9IGxpc3QoCiAgICAgICAgIG9wdHNfdG9vbGJhcihzYXZlYXNwbmcgPSBGQUxTRSkpLAogICAgICAgd2lkdGhfc3ZnID0gNi41LCBoZWlnaHRfc3ZnID0gMykKCmBgYAoKIyMjIENhc29zIGFjdGl2b3MgcG9yIGNhbnTDs24geSBwcm92aW5jaWEKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLmFsaWduPSJjZW50ZXIifQpsaWJyYXJ5KGdncmVwZWwpCgpjYW50X2dlbyA8LSBjYW50b25lc19tYXBhX3NmWwogIGNhbnRvbmVzX21hcGFfc2YkZmVjaGEgPT0gZmVjaGFfaG95ICYgCiAgICAhaXMubmEoY2FudG9uZXNfbWFwYV9zZiRwb3NpdGl2b3MpICYgCiAgICBjYW50b25lc19tYXBhX3NmJHBvc2l0aXZvcyA+IDAsIF0KCmNhbnRfZ2VvX2NudHJpZHMgPC0gc3RfY2VudHJvaWQoY2FudF9nZW8pCgpwcm92aW5jaWFzX2dlbyA8LSBhZ2dyZWdhdGUoY2FudG9uZXNfc2ltcFssICJjb2RfY2FudG9uIl0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSBsaXN0KGNhbnRvbmVzX3NpbXAkcHJvdmluY2lhKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTiA9IG1heCkKCnByb3ZpbmNpYXNfZ2VvIDwtIGRwbHlyOjpyZW5hbWUocHJvdmluY2lhc19nZW8sIHByb3ZpbmNpYSA9IEdyb3VwLjEpCgpwcm92aW5jaWFzX21hcGEgPC0gIG1lcmdlKHByb3ZpbmNpYXNfZ2VvLCBwcm92aW5jaWFzW2ZlY2hhID09IGZlY2hhX2hveSwgXSwgYnkgPSAicHJvdmluY2lhIikKCmdfbWFwYSA8LSBnZ3Bsb3QoKSArCiAgZ2VvbV9zZihkYXRhID0gY2FudG9uZXNfc2ltcCwgZmlsbCA9ICJncmF5IiwgY29sID0gIndoaXRlIiwgbHdkID0gMC4yLCBhbHBoYSA9IDAuNSkgKwogIGdlb21fc2YoZGF0YSA9IHByb3ZpbmNpYXNfbWFwYSwgZmlsbCA9IE5BLCBjb2wgPSAid2hpdGUiLCBsd2QgPSAwLjYpICsKICBnZW9tX3RleHRfcmVwZWwoZGF0YSA9IHByb3ZpbmNpYXNfbWFwYSwgCiAgICAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlMChwcm92aW5jaWEsICJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2b3MsICIgYWN1bXVsYWRvc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2b3MsICIgYWN0aXZvcyIpLAogICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBnZW9tZXRyeSksCiAgICAgICAgICAgICAgIGFscGhhID0gMC44LAogICAgICAgICAgICAgICBzaXplID0gMiwKICAgICAgICAgICAgICAgYm94LnBhZGRpbmcgPSAwLAogICAgICAgICAgICAgICBzdGF0ID0gInNmX2Nvb3JkaW5hdGVzIiwKICAgICAgICAgICAgICAgbWluLnNlZ21lbnQubGVuZ3RoID0gMC41KSArCiAgZ2VvbV9zZl9pbnRlcmFjdGl2ZShkYXRhID0gY2FudF9nZW9fY250cmlkcywgCiAgICAgICAgICAgICAgICAgICAgICBhZXMoc2l6ZSA9IGFjdGl2b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gcG9zaXRpdm9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBwYXN0ZTAoIlByb3ZpbmNpYTogIiwgcHJvdmluY2lhLCAiXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbnTDs246ICIsIGNhbnRvbiwgIlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYXNvcyBhY3VtdWxhZG9zOiAiLCBwb3NpdGl2b3MsICJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fzb3MgYWN0aXZvczogIiwgYWN0aXZvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9pZCA9IGNhbnRvbiksCiAgICAgICAgICAgICAgICAgICAgICBhbHBoYSA9IDAuNSkgKwogIGNvb3JkX3NmKGRhdHVtID0gTkEpICsKICBzY2FsZV9zaXplX2NvbnRpbnVvdXModHJhbnMgPSAncmV2ZXJzZScpICsKICBzY2FsZV9jb2xvcl9ncmFkaWVudChsb3cgPSAiYmx1ZSIsIGhpZ2ggPSAicmVkIiwgbmEudmFsdWUgPSBOQSkgKyAKICAjIHNjYWxlX2NvbG9yX3ZpcmlkaXNfYyh0cmFucyA9ICJwc2V1ZG9fbG9nIikgKwogIHRoZW1lX2xpZ2h0KCkgKyAKICBsYWJzKHggPSAiIiwKICAgICAgIHkgPSAiIiwKICAgICAgIHNpemUgPSAiQ2Fzb3MgYWN0aXZvcyIsCiAgICAgICB0aXRsZSA9ICIiLAogICAgICAgc3VidGl0bGUgPSAiIiwKICAgICAgIGNvbG9yID0gIkNhc29zIGFjdW11bGFkb3MiKSArCiAgdGhlbWUocGFuZWwuYm9yZGVyID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT05KSwKICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT03KSkgKwogIGd1aWRlcyhzaXplID0gZ3VpZGVfbGVnZW5kKHJldmVyc2UgPSBUUlVFKSwKICAgICAgICAgY29sb3IgPSBndWlkZV9jb2xvdXJiYXIoYmFyd2lkdGggPSAuNywgYmFyaGVpZ2h0ID0gNSkpICsKICBzY2FsZV9zaXplX2FyZWEoKQoKZ2lyYWZlKGdnb2JqID0gZ19tYXBhLAogIG9wdGlvbnMgPSBsaXN0KG9wdHNfaG92ZXIoY3NzID0gImZpbGw6eWVsbG93OyIpLAogICAgICAgICAgICAgICAgIG9wdHNfdG9vbGJhcihzYXZlYXNwbmcgPSBGQUxTRSksCiAgICAgICAgICAgICAgICAgb3B0c190b29sdGlwKGNzcz0oImJhY2tncm91bmQtY29sb3I6Z3JheTtjb2xvcjp3aGl0ZTtwYWRkaW5nOjVweDtib3JkZXItcmFkaXVzOjJweDsiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmeCA9IDEwLCBvZmZ5ID0gMTApKSkKCmBgYAoKIyMjIEV2b2x1Y2nDs24gZGUgY2Fzb3MgYWN1bXVsYWRvcyBwb3IgcHJvdmluY2lhCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy5hbGlnbj0iY2VudGVyIn0KZ19wcm92IDwtIGdncGxvdChtZWx0KHByb3ZpbmNpYXNbLCAuKHByb3ZpbmNpYSwgZmVjaGEsIHBvc2l0aXZvcywgcmVjdXBlcmFkb3MsIGFjdGl2b3MpXSwKICAgICAgICAgICAgICAgICAgICAgIGlkLnZhcnMgPSBjKCJwcm92aW5jaWEiLCAiZmVjaGEiKSwKICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLm5hbWUgPSAidGlwbyIsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5uYW1lID0gImNhc29zIiksIAogICAgICAgICAgICAgICAgIGFlcyh4ID0gZmVjaGEsIHkgPSBjYXNvcywgZmlsbCA9IHByb3ZpbmNpYSkpICsKICBnZW9tX2NvbF9pbnRlcmFjdGl2ZSgKICAgIGFlcyh0b29sdGlwID0gcGFzdGUwKHByb3ZpbmNpYSwgIlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc29zLCAiIGNhc29zIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAiIGFsICIsIGRheShmZWNoYSksICIgZGUgIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICBtb250aChmZWNoYSwgbGFiZWw9VFJVRSwgYWJicj1GQUxTRSkpLAogICAgICBkYXRhX2lkID0gcHJvdmluY2lhKSkgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIxIHdlZWsiLCAKICAgICAgICAgICAgICAgbWlub3JfYnJlYWtzID0gTlVMTCwKICAgICAgICAgICAgICAgZGF0ZV9sYWJlbHMgPSAgZm9ybWF0b19mZWNoYSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiQWNjZW50IikgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModGlwbykpICsKICB0aGVtZV9saWdodCgpICsKICBsYWJzKHggPSAiIiwKICAgICAgIHkgPSAiQ2Fzb3MgcmVwb3J0YWRvcyIsCiAgICAgICBmaWxsID0gIiIsCiAgICAgICB0aXRsZSA9ICIiLAogICAgICAgc3VidGl0bGUgPSAiIikgKwogIHRoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT02MCwgaGp1c3Q9MSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJib3R0b20iLCBsZWdlbmQuYm94ID0gImhvcml6b250YWwiLCAKICAgICAgICBwbG90Lm1hcmdpbiA9IHVuaXQoYyg1LDAsMCwwKSwgIm1tIiksCiAgICAgICAgbGVnZW5kLmtleS53aWR0aCA9IHVuaXQoMiwibW0iKSwKICAgICAgICBsZWdlbmQua2V5LnNpemUgPSB1bml0KDUsICJtbSIpKSArCiAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG5yb3cgPSAxKSkKCmdpcmFmZShnZ29iaiA9IGdfcHJvdiwKICAgICAgIG9wdGlvbnMgPSBsaXN0KAogICAgICAgICBvcHRzX3Rvb2x0aXAodXNlX2ZpbGwgPSBUUlVFKSwKICAgICAgICAgb3B0c190b29sYmFyKHNhdmVhc3BuZyA9IEZBTFNFKSwKICAgICAgICAgb3B0c19ob3Zlcihjc3MgPSAiZmlsbDpOVUxMO3N0cm9rZTpOVUxMOyIpKSwKICAgICAgIHdpZHRoX3N2ZyA9IDYsIGhlaWdodF9zdmcgPSA1KQpgYGAKCiogTm90ZXNlIHF1ZSBwYXJhIGVsIDE3IGRlIGFicmlsIGh1Ym8gdW4gZmFsdGFudGUgZW4gbG9zIGRhdG9zIGRlIHBlcnNvbmFzIHJlY3VwZXJhZGFzLiAKCiMjIyBFdm9sdWNpw7NuIGRlIGNhc29zIHBvciBjYW50w7NuIGR1cmFudGUgbG9zIMO6bHRpbW9zIDQwIGTDrWFzCmBgYHtyLCBlY2hvID0gRkFMU0UsIGZpZy5hbGlnbj0iY2VudGVyIn0KY2FudF9oZWF0bWFwIDwtIGNhbnRvbmVzX21hcGEKc2V0b3JkZXIoY2FudF9oZWF0bWFwLCAtY2FudG9uLCBmZWNoYSkKY2FudF9oZWF0bWFwIDwtIGNhbnRfaGVhdG1hcFsKICAsIC4oY2FudG9uLCBwcm92aW5jaWEsIGZlY2hhLCBhY3Rpdm9zLCBwb3NpdGl2b3MsIHJlY3VwZXJhZG9zKQpdWyAsIAogIGA6PWAobnVldm9zX3Bvc2l0aXZvcyA9IHBvc2l0aXZvcyAtIHNoaWZ0KHBvc2l0aXZvcywgZmlsbCA9IDApLAogICAgICAgbnVldm9zX2FjdGl2b3MgPSBhY3Rpdm9zIC0gc2hpZnQoYWN0aXZvcywgZmlsbCA9IDApKSwKICBieSA9IGNhbnRvbgpdWyAsIAogICBgOj1gKG51ZXZvc19hY3Rpdm9zID0gZmlmZWxzZShudWV2b3NfYWN0aXZvcyA8IDAgJiByZWN1cGVyYWRvcyA9PSAwLCAwLCBudWV2b3NfYWN0aXZvcyksCiAgICAgICAgbnVldm9zX3Bvc2l0aXZvcyA9IGZpZmVsc2UobnVldm9zX3Bvc2l0aXZvcyA8IDAsIDAsIG51ZXZvc19wb3NpdGl2b3MpLAogICAgICAgIElEID0gc2VxX2xlbiguTikpCl1bCiAgZmVjaGEgPj0gbHVicmlkYXRlOjp5bWQoZmVjaGFfaG95KSAtIGRheXMoNDApCl0KCmNhbnRfY2Vyb19jYXNvcyA8LSBjYW50X2hlYXRtYXBbLCAuKGNhc29zXzM1ZCA9IHN1bShhY3Rpdm9zKSksIGJ5ID0gY2FudG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1bCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fzb3NfMzVkID09IDAsIGNhbnRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCgpjYW50X2hlYXRtYXBfY2Fzb3MgPC0gY2FudF9oZWF0bWFwWyEoY2FudG9uICVpbiUgY2FudF9jZXJvX2Nhc29zKV0KCmNhbnRfaGVhdG1hcF9jYXNvcyRjYW50b24gPC0gZmFjdG9yKGNhbnRfaGVhdG1hcF9jYXNvcyRjYW50b24sIGxldmVscz11bmlxdWUoY2FudF9oZWF0bWFwX2Nhc29zJGNhbnRvbikpCiMgY2FudF9oZWF0bWFwX2Nhc29zW251ZXZvc19wb3NpdGl2b3MgPT0gMCwgbnVldm9zX3Bvc2l0aXZvcyA6PSBOQV0KCmdfY2FudF8xIDwtIGdncGxvdChjYW50X2hlYXRtYXBfY2Fzb3MsIAogICAgICAgYWVzKHggPSBmZWNoYSwgeSA9IGNhbnRvbiwgZmlsbCA9IGFjdGl2b3MpKSArIAogIGdlb21fdGlsZSh3aWR0aD0xLCBoZWlnaHQ9LjgpICsKICAjZ2VvbV9wb2ludChzaXplID0gMC40KSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjEwIGRheXMiLCAKICAgICAgICAgICAgICAgbWlub3JfYnJlYWtzID0gTlVMTCwKICAgICAgICAgICAgICAgZGF0ZV9sYWJlbHMgPSBmb3JtYXRvX2ZlY2hhLAogICAgICAgICAgICAgICAjbGltaXRzID0gYyhtaW4oY2FudG9uZXNfdGlkeSRmZWNoYSksIHltZChmZWNoYV9ob3kpKSwKICAgICAgICAgICAgICAgc2VjLmF4aXMgPSBkdXBfYXhpcygpKSArCiAgIyBzY2FsZV9jb2xvdXJfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfZmlsbF92aXJpZGlzX2ModHJhbnMgPSAicHNldWRvX2xvZyIpICsKICB0aGVtZV9saWdodCgpICsKICBsYWJzKHggPSAiIiwKICAgICAgIHkgPSAiIiwKICAgICAgIGZpbGwgPSAiIiwKICAgICAgIHRpdGxlID0gIiIsCiAgICAgICBzdWJ0aXRsZSA9ICJDYXNvcyBhY3Rpdm9zIikgKwogIHRoZW1lKCNheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT02MCwgaGp1c3Q9MSksCiAgICAgICAgI2F4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KSwKICAgICAgICBsZWdlbmQucG9zaXRpb249ImxlZnQiLCBsZWdlbmQuYm94ID0gInZlcnRpY2FsIiwKICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNiksCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoMCwwLDAsMCksICJtbSIpCiAgICAgICAgKSArCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvdXJiYXIoYmFyd2lkdGggPSAuNSwgYmFyaGVpZ2h0ID0gMTApKQoKZ19jYW50XzFfZyA8LSBnX2NhbnRfMSArIAogIGdlb21fdGlsZV9pbnRlcmFjdGl2ZSgKICAgIGFlcyh0b29sdGlwID0gcGFzdGUwKAogICAgICAiUHJvdmluY2lhOiAiLCBwcm92aW5jaWEsICJcbiIsCiAgICAgICJDYW50w7NuOiAiLCBjYW50b24sICJcbiIsCiAgICAgIGRheShmZWNoYSksICIgZGUgIiwgbW9udGgoZmVjaGEsIGxhYmVsPVRSVUUsIGFiYnI9RkFMU0UpLCAiXG4iLCAKICAgICAgIkNhc29zIGFjdW11bGFkb3M6ICIsIHBvc2l0aXZvcywgIlxuIiwKICAgICAgIk51ZXZvcyBjYXNvcyBwb3NpdGl2b3M6ICIsIG51ZXZvc19wb3NpdGl2b3MsICJcbiIsIAogICAgICAiQ2Fzb3MgYWN0aXZvczogIiwgYWN0aXZvcyksCiAgICAgIGRhdGFfaWQgPSBJRCksIAogICAgd2lkdGg9MSwgaGVpZ2h0PS44KQoKZ19jYW50XzIgPC0gZ2dwbG90KGNhbnRfaGVhdG1hcF9jYXNvcywgCiAgICAgICBhZXMoeCA9IGZlY2hhLCAKICAgICAgICAgICB5ID0gY2FudG9uLCAKICAgICAgICAgICBmaWxsID0gbnVldm9zX3Bvc2l0aXZvcykpICsgCiAgZ2VvbV90aWxlKHdpZHRoPTEsIGhlaWdodD0uOCkgKwogICNnZW9tX3BvaW50KHNpemUgPSAwLjQpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMTAgZGF5cyIsIAogICAgICAgICAgICAgICBtaW5vcl9icmVha3MgPSBOVUxMLAogICAgICAgICAgICAgICBkYXRlX2xhYmVscyA9IGZvcm1hdG9fZmVjaGEsCiAgICAgICAgICAgICAgICNsaW1pdHMgPSBjKG1pbihjYW50b25lc190aWR5JGZlY2hhKSwgeW1kKGZlY2hhX2hveSkpLAogICAgICAgICAgICAgICBzZWMuYXhpcyA9IGR1cF9heGlzKCkpICsKICAjIHNjYWxlX2NvbG91cl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICAjIHNjYWxlX3lfZGlzY3JldGUocG9zaXRpb24gPSAicmlnaHQiKSArCiAgc2NhbGVfZmlsbF92aXJpZGlzX2Mob3B0aW9uID0gInBsYXNtYSIsIAogICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IDEsIAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IG51bWJlcl9mb3JtYXQoYWNjdXJhY3kgPSAxKSwgCiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAicHNldWRvX2xvZyIpICsKICB0aGVtZV9saWdodCgpICsKICBsYWJzKHggPSAiIiwKICAgICAgIHkgPSAiIiwKICAgICAgIGZpbGwgPSAiIiwKICAgICAgIHRpdGxlID0gIiIsCiAgICAgICBzdWJ0aXRsZSA9ICJDYXNvcyBwb3NpdGl2b3MgbnVldm9zIikgKwogIHRoZW1lKCNheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT02MCwgaGp1c3Q9MC41KSwKICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X2JsYW5rKCksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJyaWdodCIsIGxlZ2VuZC5ib3ggPSAidmVydGljYWwiLAogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLAogICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA2KSwKICAgICAgICBwbG90Lm1hcmdpbiA9IHVuaXQoYygwLDAsMCwwKSwgIm1tIikpICsKICBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG91cmJhcihiYXJ3aWR0aCA9IC41LCBiYXJoZWlnaHQgPSAxMCkpCgpnX2NhbnRfMl9nIDwtIGdfY2FudF8yICsgCiAgZ2VvbV90aWxlX2ludGVyYWN0aXZlKAogICAgYWVzKHRvb2x0aXAgPSBwYXN0ZTAoCiAgICAgICJQcm92aW5jaWE6ICIsIHByb3ZpbmNpYSwgIlxuIiwKICAgICAgIkNhbnTDs246ICIsIGNhbnRvbiwgIlxuIiwKICAgICAgZGF5KGZlY2hhKSwgIiBkZSAiLCBtb250aChmZWNoYSwgbGFiZWw9VFJVRSwgYWJicj1GQUxTRSksICJcbiIsCiAgICAgICJDYXNvcyBhY3VtdWxhZG9zOiAiLCBwb3NpdGl2b3MsICJcbiIsCiAgICAgICJOdWV2b3MgY2Fzb3MgcG9zaXRpdm9zOiAiLCBudWV2b3NfcG9zaXRpdm9zLCAiXG4iLAogICAgICAiQ2Fzb3MgYWN0aXZvcyBudWV2b3M6ICIsIG51ZXZvc19hY3Rpdm9zKSwKICAgICAgZGF0YV9pZCA9IElEKSwgCiAgICB3aWR0aD0uOSwgaGVpZ2h0PS44KQoKZ2lyYWZlKGdnb2JqID0gcGxvdF9ncmlkKGdfY2FudF8xX2csIGdfY2FudF8yX2csIHJlbF93aWR0aHMgPSBjKDEsIC43NSkpLCAKICAgICAgIG9wdGlvbnMgPSBsaXN0KG9wdHNfdG9vbGJhcihzYXZlYXNwbmcgPSBGQUxTRSksCiAgICAgICAgICAgICAgICAgICAgICBvcHRzX2hvdmVyKGNzcyA9ICJmaWxsOnRyYW5zcGFyZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6cmVkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6MiIpLAogICAgICAgICAgICAgICAgICAgICAgb3B0c190b29sdGlwKG9mZnggPSAxNSwgb2ZmeSA9IDE1KSksCiAgICAgICB3aWR0aF9zdmcgPSA4LCBoZWlnaHRfc3ZnID0gMTEpCmBgYAoKKiBWYWxlIGFjbGFyYXIgcXVlIGVuIGxhcyB0YWJsYXMgZGlhcmlhcyBjYW50b25hbGVzIHF1ZSBwdWJsaWNhIGVsIE1pbmlzdGVyaW8gZGUgU2FsdWQgYSB2ZWNlcyBzZSBkYW4gY2FtYmlvcyBlbiBsYSBjYW50aWRhZCBkZSBlbmZlcm1vcyBwb3IgY2FudMOzbiBxdWUgbm8gY29ycmVzcG9uZGVuIGNvbiBjYW1iaW9zIGVuIGVsIHRvdGFsIGRlIGVuZmVybW9zIGRlbCBwYcOtcy4gRXN0byB2ZW5kcsOtYSBzaWVuZG8gY29tbyBzaSBsb3MgZW5mZXJtb3Mgc2UgbW92aWxpemFyb24gYSBvdHJvIGNhbnTDs24sIHNpZ25pZmljYW5kbyB1bmEgcmVkdWNjacOzbiBlbiBlbCBuw7ptZXJvIGRlIGNhc29zIHBhcmEgZWwgY2FudMOzbiBkb25kZSBzYWxpw7MgeSB1biBpbmNyZW1lbnRvIHBhcmEgZWwgY2FudMOzbiBkb25kZSBpbmdyZXPDsyAodGVuZ28gZW50ZW5kaWRvIHF1ZSBlc3RvIHNlIGRhIGNvbiBhY2xhcmFjaW9uZXMgZGVsIGNhbnTDs24gZGUgcmVzaWRlbmNpYSBkZWwgZW5mZXJtbykuIEVuIG1pIGNhc28gZXN0b3kgY29udmlydGllbmRvIGVzb3MgImNhc29zIG5lZ2F0aXZvcyIgYSBjZXJvLCBwYXJhIHF1ZSBzZWEgbcOhcyBmw6FjaWwgb2JzZXJ2YXIgdW5pY2FtZW50ZSBsb3MgY2FudG9uZXMgZG9uZGUgc2UgZGllcm9uIGxvcyBudWV2b3MgY2Fzb3MuCgoqKioqKioKCkVsYWJvcmFkbyBwb3IgZ2RzNTA2QGdtYWlsLmNvbSBjb24gZGF0b3MgZGlhcmlvcyBkZWwgW0NTU0UgZGVsIEpvaG4gSG9wa2lucyBVbml2ZXJzaXR5XShodHRwczovL2dpdGh1Yi5jb20vQ1NTRUdJU2FuZERhdGEvQ09WSUQtMTkpIHkgZGVsIFtNaW5pc3RlcmlvIGRlIFNhbHVkIGRlIENvc3RhIFJpY2FdKGh0dHA6Ly9nZW92aXNpb24udW5lZC5hYy5jci9vZ2VzLykuIA==